/**
 * <b>项目名：</b>亲子分享-服务端项目<br/>
 * <b>包名：</b>com.saas.service<br/>
 * <b>文件名：</b>APIService.java<br/>
 * <b>版本信息：</b>V1.0<br/>
 * <b>日期：</b>2014-9-2-下午04:08:16<br/>
 * <b>作者：</b><br/>
 * <b>Copyright (c)</b> 2014坚果(北京)科技有限公司-版权所有<br/>
 */
package com.saas.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.saas.dao.MongoDAO;
import com.saas.exception.ServiceException;
import com.saas.util.Constant;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;

/**
 * 
 * <b>类名称：</b>APIService<br/>
 * <b>类描述：</b><br/>
 * <b>创建人：</b><br/>
 * <b>修改人：</b><br/>
 * <b>修改时间：</b>2014-9-2 下午04:08:16<br/>
 * <b>修改备注：</b><br/>
 * 
 * @version 1.0.0<br/>
 * 
 */
@Component
public class APIService {

	@Autowired
	private MongoDAO mongoDao;

	/**
	 * 
	 * get(按id获取对象)
	 * 
	 * @param model
	 * @param id
	 * @return
	 * @throws Exception
	 *             String
	 * @exception
	 * @since 1.0.0
	 */
	public JSONObject get(String model, String id) throws ServiceException {
		String entity = mongoDao.get(model, id);
		if(entity!=null){
			JSONObject jsonObj = JSON.parseObject(entity);
			jsonObj.remove("_id");
			return jsonObj;
		}
		return null;
	}

	/**
	 * 
	 * save(保存对象)
	 * 
	 * @param model
	 * @param json
	 * @return JSONObject
	 * @throws Exception
	 *             String
	 * @exception
	 * @since 1.0.0
	 */
	public JSONObject save(String model, String json) throws ServiceException {
		JSONObject returnVaue = mongoDao.save(model, json);
		return returnVaue;
	}

	/**
	 * 
	 * update(更新某对象)
	 * 
	 * @param model
	 * @param json
	 * @param id
	 * @return
	 * @throws Exception
	 *             String
	 * @exception
	 * @since 1.0.0
	 */
	public JSONObject update(String model, String json, String id) throws ServiceException {
		return mongoDao.update(model, json, id);
	}

	/**
	 * 
	 * 查找并更新
	 * findAndModifySet(更新)
	 * 使用时需要注意：
	 * 1.默认使用$set，其中包含$inc的处理
	 * 2.如果需要用到其他的mongodb的语法还需增加判断和处理
	 * 若不想修改次方法；可使用宝哥写的findAndModify；
	 * 从前台将需处理的字段填写好
	 * 
	 * @param model
	 * @param update
	 * @param where
	 * @return
	 * @throws Exception
	 *             String
	 * @exception
	 * @since 1.0.0
	 */
	public JSONObject findAndModifySet(String model, String update, String where) throws ServiceException {
		return mongoDao.findAndModifySet(model, update, where);
	}

	/**
	 * 原子修改操作
	 * @param model
	 * @param where
	 * @param update
	 * @param returnNew
	 * @param upsert
	 * @return
	 */
	public JSONObject findAndModify(String model, String where, String update, boolean returnNew, boolean upsert) throws ServiceException{
		return mongoDao.findAndModify(model, where, update, returnNew, upsert);
	}
	
	/**
	 * 
	 * update(更新某对象)
	 * 
	 * @param model
	 * @param json
	 * @param id
	 * @return
	 * @throws Exception
	 *             String
	 * @exception
	 * @since 1.0.0
	 */
	public JSONObject inc(String model, String json, String id) throws ServiceException {
		return mongoDao.inc(model, json, id);
	}

	/**
	 * 
	 * delete(删除某对象)
	 * 
	 * @param model
	 * @param id
	 * @return JSONObject
	 * @throws Exception
	 * @exception
	 * @since 1.0.0
	 */
	public JSONObject delete(String model, String id) throws ServiceException {
		return mongoDao.delete(model, id);
	}

	/**
	 * 按(多条)字段获取一条记录
	 * 
	 * @param String
	 *            [] field(s)
	 * @return
	 * 
	 *         public boolean findOneByFields(String ...fields) { return true; }
	 */

	/**
	 * 按字段查询一条记录(用于非严谨地注册)
	 * 
	 * @param String
	 *            value String collection String key
	 * @return
	 */

	public DBObject findOneByField(String collection, String key, String value) {
		return mongoDao.findOne(collection, key, value);
	}

}
